﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Data;

namespace prjMateriais
{
    public partial class frmProcessoSaidaMaterial : FormProcessoPadrao.FormProcessoPadrao
    {
        int codigoLote;
        bool firstClick;
        public frmProcessoSaidaMaterial()
        {
            InitializeComponent();
            firstClick = true;
            first = true;
        }

        private void frmProcessoSaidaMaterial_Load(object sender, EventArgs e)
        {
            pnlFimProcesso.Visible = false;
            tbcntrlEtapas.Visible = false;
            pnlFimProcesso.Dock = DockStyle.Fill;
            pnlInicio.Dock = DockStyle.Fill;
            insereTextoProcesso(" de Saída de Material");
        }

        private void frmProcessoSaidaMaterial_Shown(object sender, EventArgs e)
        {
            loadHistorico();
        }


        public void loadHistorico()
        {
            try
            {
                string sql = SqlCrud.getInstance.select(ConstTabelas.HISTORICOMOVIMENTACAO, "Nome like '%saida%'");
                DataTable dt = Conexao.getInstance.executeQuery(sql);
                cboHistorico.DataSource = dt;
                cboHistorico.DisplayMember = "Nome";
                cboHistorico.ValueMember = ConstTabelas.HISTORICOMOVIMENTACAO_PK;
            }
            catch { }
        }

        private void updateLote()
        {
            campos = new List<string>();

            campos.Add("Quantidade = (Quantidade -" + int.Parse(txtQtd.Text) + ")");

            this.update(ConstTabelas.LOTE, campos, ConstTabelas.LOTE_PK, codigoLote);
        }

        private void saveMovimentacao()
        {
            campos.Clear();

            if (values == null) { values = new List<object>(); }

            values.Clear();

            campos.Add("Lote");
            campos.Add("Quantidade");
            campos.Add("HistoricoMovimentacao");
            campos.Add("TipoEstoque");
            campos.Add("Data");

            values.Add(codigoLote);
            values.Add(txtQtd.Text);
            values.Add(cboHistorico.SelectedValue);
            values.Add(tipoEstoque);
            values.Add(System.DateTime.Now.ToString(("MM/dd/yyyy")));


            this.insert(ConstTabelas.MOVIMENTACOES, campos, values);
        }

        public override bool dadosValidos()
        {
            if (!this.first)
            {
                if (cboMaterial.DataSource == null)
                {
                    MessageBox.Show("É necessário informar o Material", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            first = false;
            return true;
        }

        public override bool metodo()
        {
            try
            {
                updateLote();
                saveMovimentacao();
               // Conexao.getInstance.CommitTransacao();
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Houve um erro na execução do processo! \n Verifique! \n" + ex.Message, "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

        }

        private void cboLote_SelectedIndexChanged(object sender, EventArgs e)
        {
            loadInfoLote();
        }

        private void loadInfoLote()
        {
            try
            {
                string sql = SqlCrud.getInstance.selectCampo(ConstTabelas.LOTE, "Codigo", "CodigoTipoEstoque, Quantidade", codigoLote);
                DataTable dt = Conexao.getInstance.executeQuery(sql);
                lblQtd.Text = dt.Rows[0][1].ToString();
                txtQtd.Maximum = Convert.ToDecimal(dt.Rows[0][1]);

                tipoEstoque = dt.Rows[0][0];
            }
            catch { }
        }

        public object tipoEstoque { get; set; }

        private void cboMaterial_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                string sql = "SELECT * FROM Lote WHERE Data = (SELECT MIN(Data) FROM LOTE WHERE CodigoMaterial = " + cboMaterial.SelectedValue + " AND Quantidade > 0)";

                DataTable dt = Conexao.getInstance.executeQuery(sql);

                codigoLote = Convert.ToInt32(dt.Rows[0][0]);
                txtLote.Text = dt.Rows[0][1].ToString(); //linha 0, coluna nome

                loadInfoLote();
            }
            catch
            { }
        }

        private void cboMaterial_Click(object sender, EventArgs e)
        {
            if (firstClick)
            {
                loadCombos(ConstTabelas.MATERIAL, ConstTabelas.MATERIAL_PK, cboMaterial);
                firstClick = false;
            }
        }

        public bool first { get; set; }
    }
}
